import requests, random
import MySQLdb

# 连接数据库
conn = MySQLdb.connect(
    host="localhost",  # mysql所在的主机的ip
    port=3306,  # mysql的端口号
    user="root",  # mysql的用户名
    password="123456",  # mysql的密码
    db="reptiles",  # 要使用的库名
    charset="utf8",  # 连接中使用的字符集

)
cursor = conn.cursor(MySQLdb.cursors.DictCursor)  # 获取游标对象,里面可以为空,这样写是为了显示全面的信息

url = "https://sp0.baidu.com/8aQDcjqpAAV3otqbppnN2DJv/api.php?"

for j in range(0, 1000, 10):
    # pass
    flag = 0  # 定义一个计数器,当获取到的重复数据次数为多少时不再获取数据
    while flag <10:
        data = {
            'resource_id': 6899,
            'query': '失信人',
            'pn': j,  # 翻页依据
            'rn': 10,  # 每次翻取的数量
            'from_mid': 1,
            'ie': 'utf-8',
            'oe': 'utf-8',
            'format': 'json',
        }
        headers = {
            'Referer': 'https://www.baidu.com/s?wd=%E5%A4%B1%E4%BF%A1%E4%BA%BA&rsv_spt=1&rsv_iqid=0xcf24967900104763&issp=1&f=8&rsv_bp=1&rsv_idx=2&ie=utf-8&tn=baiduhome_pg&rsv_enter=1&rsv_dl=ib&rsv_sug3=2&rsv_sug1=1&rsv_sug7=100&rsv_sug2=0&rsv_btype=i&inputT=1737&rsv_sug4=3360',
            # 'User-Agent':'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.81 Safari/537.36 SE 2.X MetaSr 1.0'
        }

        # 通过json获取到ajax请求返回的formate对象的值( 这就是网页内翻页的显示结果)
        # 需要带params参数(data传递的值,包含翻页逻辑),和headers参数(看headers参数里面主要是哪个参数在起作用哪个)
        res = requests.get(url, params=data, headers=headers).json()

        # 获取到的所有主要信息的值,遍历取值即可
        list = res["data"][0]["disp_data"]
        for i in list:
            name = i["iname"]  # 姓名
            casecode = i["caseCode"]  # 案号
            # 其他数据都一样,这里就先不爬了,为避免数据重复,这里面的字段,案号是唯一的,可以在设计数据库的时候定为主键
            try :
                sql = "insert into baidu_dishonesty2 values (%s,%s)"
                last = cursor.execute(sql, [name, casecode])
                conn.commit()
            except:
                flag+= 1     # 如果访问到的案号一致,则给flag加1,当重复次数达到10次时,不再获取数据
